/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package jogo;

/**
 *
 * @author Thiago Nascimento e Pablo Viana
 */
public class Peca {

    private int valor1;
    private int valor2;

    // CONSTRUTOR //////////////////////////////////////////////////////////////
    public Peca(int valor1, int valor2) {
        if (valor1 < valor2) {
            this.valor1 = valor1;
            this.valor2 = valor2;
        } else {
            this.valor1 = valor2;
            this.valor2 = valor1;
        }
    }

    // GETS E SETS /////////////////////////////////////////////////////////////
    public int getValor1() {
        return valor1;
    }

    public int getValor2() {
        return valor2;
    }

    public void setValor1(int valor1) {
        this.valor1 = valor1;
    }

    public void setValor2(int valor2) {
        this.valor2 = valor2;
    }

    // METODOS /////////////////////////////////////////////////////////////////
    public int getPontosBatida(int cabecaDireita, int cabecaEsquerda) {
        int pontos = 1;
        if(this.valor1 == this.valor2) {
            pontos += 1;
        }
        if(this.encaixa(cabecaDireita) && this.encaixa(cabecaEsquerda)) {
            pontos += 2;
        }        
        return pontos;
    }    
    
    public boolean encaixa(int valor) {
        return (this.valor1 == valor || this.valor2 == valor);
    }

    public boolean equals(Peca p) {
        if (p != null) {
            return (this.valor1 == p.valor1 && this.valor2 == p.valor2);
        }
        return false;
    }

    // METODOS OVERRIDE ////////////////////////////////////////////////////////
    public boolean equals(Object o) {
        if (o != null && o instanceof Peca) {
            Peca p = (Peca) o;
            return this.equals(p);
        }
        return false;
    }

    public int hashCode() {
        return ((this.valor1 * 7) + this.valor2);
    }

    public String toString() {
        return "(" + this.valor1 + ":" + this.valor2 + ")";
    }
    
    public String toStringEncaixandoNaProxima(Peca proxima) {
        if(proxima.encaixa(this.valor1)) {
            return "(" + this.valor2 + ":" + this.valor1 + ")";
        } else {    
            return "(" + this.valor1 + ":" + this.valor2 + ")";
        }
    }
    
    public String toStringEncaixandoNaAnterior(Peca anterior) {
        if(anterior.encaixa(this.valor1)) {
            return "(" + this.valor1 + ":" + this.valor2 + ")";
        } else {
            return "(" + this.valor2 + ":" + this.valor1 + ")";
        }
    }

    // CUIDADO COM ESSE METODO!!! so usar em pecas que nao sao contidas pelo jogador
    public void trocarValores() {
        int temp = valor1;
        valor1 = valor2;
        valor2 = temp;
    }
}
